# 人工智能NLP-Agent数字人项目-02-日程提醒任务工单V1.1-20250217
import sqlite3
from typing import Any
from langchain.tools import BaseTool
from agent import agent_service

class DeleteTimer(BaseTool):
    # 工具名称
    name = "DeleteTimer"
    # 工具描述，明确告知使用方式
    description = "用于删除某一个日程，接受任务id作为参数，参数应为有效的整数，如：2"

    def __init__(self):
        # 调用父类的初始化方法
        super().__init__()

    def _run(self, parameter: str) -> str:
        try:
            # 尝试将输入的参数转换为整数
            task_id = int(parameter)
        except ValueError:
            # 若转换失败，返回错误信息
            return "输入的 ID 无效，必须是有效的整数。"

        try:
            # 连接到数据库
            with sqlite3.connect('timer.db') as conn:
                cursor = conn.cursor()
                # 执行删除操作
                cursor.execute("DELETE FROM timer WHERE id = ?", (task_id,))
                # 检查是否有记录被删除
                if cursor.rowcount == 0:
                    return f"任务 {task_id} 不存在，未进行删除操作。"
                # 提交事务
                conn.commit()
        except sqlite3.Error as e:
            # 若数据库操作出现错误，返回错误信息
            return f"数据库错误: {str(e)}"

        if task_id in agent_service.scheduled_tasks:
            # 取消已调度的任务
            agent_service.scheduled_tasks[task_id].cancel()
            # 从已调度任务字典中删除该任务
            del agent_service.scheduled_tasks[task_id]
            return f"任务 {task_id} 取消成功。"
        else:
            return f"任务 {task_id} 未在调度任务中找到。"

if __name__ == "__main__":
    # 创建 DeleteTimer 工具实例
    tool = DeleteTimer()
    # 调用工具的 run 方法进行测试
    result = tool.run("1")
    print(result)